/**
 * 
 */
package front;


import java.io.IOException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.model.SelectItem;

import org.apache.myfaces.shared_tomahawk.util.MessageUtils;

import front.Libro;

public class ServidorFront {

	private Servicio servicio;
	private List<Libro> listaLibros;
	private String tema;
	private String titulo;
	private List<SelectItem> listaTemas;
	
	public ServidorFront () throws UnknownHostException, IOException {
		try {
		    servicio = new Servicio();
		    listaTemas = new ArrayList<SelectItem>();
			listaTemas = buildSelectList(servicio.getListaTemas());
		    listaLibros = new ArrayList<Libro>();
		    listaLibros = servicio.getListaLibros();
		    //listaLibros = servicio.getListaLibrosTema("Computacion");
		    
		} catch (IOException e) {
			MessageUtils.addMessage(FacesMessage.SEVERITY_FATAL,"Error en la conexion al servidor",null);
		} catch (ClassNotFoundException e) {
			MessageUtils.addMessage(FacesMessage.SEVERITY_FATAL,"Error al traer los datos",null);
		} 		
	}

	public String getTema() {
		return tema;
	}

	public void setTema(String tema) {
		this.tema = tema;
	}

	public List<Libro> getListaLibros() {
		return listaLibros;
	}

	public void setListaLibros(List<Libro> listaLibros) {
		this.listaLibros = listaLibros;
	}

	public List<SelectItem> getListaTemas() {
		return listaTemas;
	}

	public void setListaTemas(List<SelectItem> listaTemas) {
		this.listaTemas = listaTemas;
	}
	
	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}
	
	private List<SelectItem> buildSelectList(List<String> lista) {
		List<SelectItem> listaSI = new ArrayList<SelectItem>();
		for(String tema : lista) {
			listaSI.add(new SelectItem(tema,tema));
		}
		if (!listaSI.isEmpty()) listaSI.add(0,new SelectItem("",""));
		return listaSI;
		
	}

	public String buscar() {
		
		if (servicio == null) {
			MessageUtils.addMessage(FacesMessage.SEVERITY_FATAL, "No hay conexion con el host", null);
			return "Failure";
		}
		if (("".equalsIgnoreCase(titulo.trim())) && ("".equalsIgnoreCase(tema))) {
			MessageUtils.addMessage(FacesMessage.SEVERITY_FATAL, "Completar un campo", null);
			return "Failure";
		}
		try {
			if ( ("".equalsIgnoreCase(titulo.trim())) && (!"".equalsIgnoreCase(tema)) ) {
				listaLibros = servicio.getListaLibrosTema(tema);
				return "Success";
			}
			if ((!"".equalsIgnoreCase(titulo.trim())) && ("".equalsIgnoreCase(tema))) {
				listaLibros = servicio.getListaLibrosTitulo(titulo);
				return "Success";
			}
			if ((!"".equalsIgnoreCase(titulo.trim())) && (!"".equalsIgnoreCase(tema))) {
				listaLibros = servicio.getListaLibrosTemaTitulo(tema,titulo);
				return "Success";
			}
		} catch (IOException e) {
			MessageUtils.addMessage(FacesMessage.SEVERITY_FATAL,"Error en la conexion al servidor",null);
		} catch (ClassNotFoundException e) {
			MessageUtils.addMessage(FacesMessage.SEVERITY_FATAL,"Error al traer los datos",null);
		}
			return "Success";
	}
	
	public void comprar() {
		for (Libro libro : listaLibros) {
			if (!libro.isSeleccionado()) continue;
			try {
				List<String> ret = servicio.comprarLibro(""+libro.getId_libro());
				if ("YC".equalsIgnoreCase(ret.get(0))) {
					libro.setStock(libro.getStock()-1);
					MessageUtils.addMessage(FacesMessage.SEVERITY_FATAL,"Compra exitosa "+libro.getTitulo(),null);
				} else 
				if ("NS".equalsIgnoreCase(ret.get(0))) {
					MessageUtils.addMessage(FacesMessage.SEVERITY_FATAL,"No hay mas stock "+libro.getTitulo(),null);
				} else 
				if ("NO".equalsIgnoreCase(ret.get(0))) {
					MessageUtils.addMessage(FacesMessage.SEVERITY_FATAL,"Error con el servidor",null);
				}
			} catch (IOException e) {
				MessageUtils.addMessage(FacesMessage.SEVERITY_FATAL,"Error en la conexion al servidor",null);
			} catch (ClassNotFoundException e) {
				MessageUtils.addMessage(FacesMessage.SEVERITY_FATAL,"Error al traer los datos",null);
			}
		}
	}

}
